//
//  WXOAuthViewController.swift
//  WXWeiBo
//
//  Created by Angel-xin on 2016/09/20.
//  Copyright © 2016年 Angel-xin. All rights reserved.
//

import UIKit
import SVProgressHUD

// 第三方登录视图控制器
// 新浪开发平台提供的APPKey
let WeiboAppKey = "758686810"
// client_secret
let WeiboAppSecret = "dc62dc8f7c8eb62769121a3b88170766"
// 授权回调页
let WeiboRedirect_Uri = "http://www.itcast.cn"

class WXOAuthViewController: UIViewController {
    
    // MARK: - 懒加载
    private lazy var webView: UIWebView = UIWebView()
    
    // 重写 loadView, 目的把webView作为视图控制器的view
    override func loadView() {
        
        // 解决底部webView黑条
        // 改成透明解决黑条问题
        webView.isOpaque = false
        webView.delegate = self
        view = webView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        requestLogin()
        setupNavUI()
    }
    
    // 请求第三方登录
    private func requestLogin() {
        
        // 准备 url 地址
        let url = "https://api.weibo.com/oauth2/authorize?client_id=\(WeiboAppKey)&redirect_uri=\(WeiboRedirect_Uri)"
        
        // 创建 urlrequest 对象
        webView.loadRequest(URLRequest(url: URL(string: url)!))
    }
    
    // 设置导航栏按钮
    private func setupNavUI() {
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "取消", target: self, action: #selector(cancelAction))
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: #selector(autoFillAction))
        title = "微博"
    }
    
    // MARK: - 点击事件处理
    @objc private func cancelAction() {
        // 点击取消的时候让等待指示器删除
        SVProgressHUD.dismiss()
        dismiss(animated: true, completion: nil)
    }
    
    @objc private func autoFillAction() {
        
        print("自动填充")
        
        webView.stringByEvaluatingJavaScript(from: "document.getElementById('userId').value = '18611690771';document.getElementById('passwd').value = 'shiwx0525'")
        
    }
    
//    // 通过code获取accesstoken
//    func requestAccesstoken(code: String) {
//        WXNetworkingTools.sharedTools.requestAccessToken(code: code) { (response, error) in
//            if error != nil {
//                print("网络请求异常: \(error)")
//                return
//            }
//            
//            // 网络请求成功
//            guard let dic = response as? [String: Any] else {
//                print("字典格式")
//                return
//            }
//            
//            // 完成字典转模型
//            let userAccount = WXUserAccount(dic: dic)
//            print(userAccount.access_token)
//            
//            // 获取用户信息
//            self.requestUserInfo(userAccount: userAccount)
//        }
//    }
//    
//    // 根据accesskon和用户id获取用户信息
//    func requestUserInfo(userAccount: WXUserAccount) -> Void {
//        
//        WXNetworkingTools.sharedTools.requestUserInfo(accessToken: userAccount.access_token!, uid: userAccount.uid) { (response, error) in
//            
//            if error != nil {
//                print("网络请求异常: \(error)")
//                return
//            }
//            
//            // 代码执行到此网络请求成功
//            guard let dic = response as? [String: Any] else {
//                print("你不是一个正确的字典")
//                return
//            }
//            
//            let name = dic["name"]
//            let profile_image_url = dic["profile_image_url"]
//            
//            
//            userAccount.name = name as? String
//            userAccount.profile_image_url = profile_image_url as? String
//            
//            print(userAccount.name)
//            
//            // 代码执行到此,表示用户登录成功
//            userAccount.saveUserAccount()
//
//        }
//    }

}

// MARK: - UIWebViewDelegate
extension WXOAuthViewController: UIWebViewDelegate {
    
    // 开始加载请求
    func webViewDidStartLoad(_ webView: UIWebView) {
        SVProgressHUD.show()
    }
    
    // 加载完成
    func webViewDidFinishLoad(_ webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    
    // 加载失败
    func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
        SVProgressHUD.dismiss()
    }
    
    // 将要加载请求
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        guard let url = request.url else {
            print("url 为 nil")
            return false
        }
        
        print(url.absoluteString)
        
        if !url.absoluteString.hasPrefix(WeiboRedirect_Uri) {
            return true
        }
        
        // 需要的地址
        if let query = url.query, query.hasPrefix("code=") {
            // 根据光标的结束位置获取子串
            let code = query.substring(from: "code=".endIndex)
            
            WXUserAccountViewModel.sharedUserAccountViewModel.requestAccesstoken(code: code, callBack: { (isSuccess) in
                if isSuccess {
                    print("登录成功")
                    
                    // 要等到dismis完成以后在发送切换根视图控制器的操作
                    self.dismiss(animated: false, completion: {
                        // 进入欢迎页面
                        
                        NotificationCenter.default.post(name: NSNotification.Name(SwitchRootVCNotification), object: self)
                    })

                }
            })
        } else {
            // 取消授权
            dismiss(animated: true, completion: nil)
        }
        return true
    }
    
}
